/**
 * Copyright(C)版权所有 中国电子科技集团公司第三十二研究所
 * @Title: service层接实现类
 * @author: 徐文远
 * @version: 1.0
 * @date: 2020/10/16
 * 备注:无
 * 更改描述：无
 */
package com.cetc32.dh.service.impl;

import com.cetc32.dh.entity.DataSubmit;
import com.cetc32.dh.mybatis.DataSubmitMapper;
import com.cetc32.dh.service.DataSubmitService;
import org.apache.shiro.util.Assert;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Title: DataSubmitServiceImpl
 * @Description:
 * @author: youqing
 * @version: 1.0
 * @date: 2020/11/21 11:04
 */
@Service
public class DataSubmitServiceImpl implements DataSubmitService {

    DataSubmitMapper dsMapper;

    /**
     * 提交请求后数据插入操作
     *
     * @param ds 更新到数库的数据
     * @return 反馈是否成功
     **/
    @Override
    public Integer insertDataSubmit(DataSubmit ds) {
        if (ds == null) {
            return -1;
        }
        if (ds.getApprover() == null || ds.getPath() == null || ds.getArea() == null || ds.getYear() == null) {
            return -1;
        } else {
            return dsMapper.insertOne(ds);
        }
    }

    /**
     * 拒绝用户此时数据导入申请
     *
     * @param ds 写入到数库的数据
     * @return 反馈是否成功
     **/
    @Override
    public Integer rejectSubmit(DataSubmit ds) {
        if (ds == null) {
            return -1;
        }
        if (ds.getId() == null) {
            return -1;
        }
        ds.setStatus(-1);
        ds.setApprover("审核人已拒绝");
        return dsMapper.updateById(ds);

    }

    /**
     * 接受用户此时数据导入申请
     *
     * @param ds 更新到数库的数据
     * @return 反馈是否成功
     **/
    @Override
    public Integer acceptSubmit(DataSubmit ds) {
        if (ds == null) {
            return -1;
        }
        if (ds.getId() == null) {
            return -1;
        }
        ds.setStatus(1);
        ds.setApprover("审核人已审核");
        return dsMapper.updateById(ds);
    }

    /**
     * 查询当前登陆用户提交的导入申请
     *
     * @param dataSubmit 待查询的数据
     * @return 反馈查询到的结果
     **/
    @Override
    public List<DataSubmit> selectMySubmit(DataSubmit dataSubmit) {
        if (dataSubmit == null) {
            return null;
        }
        dataSubmit.setApprover(null);
        return dsMapper.selectMine(dataSubmit);
    }

    /**
     * 查询当前登陆用户的审核过的以及未审核的提交信息
     *
     * @param dataSubmit 待查询的数据
     * @return 反馈查询到的结果
     **/
    @Override
    public List<DataSubmit> selectMyApprove(DataSubmit dataSubmit) {
        if (dataSubmit == null) {
            return null;
        }
        dataSubmit.setSubmitor(null);
        return dsMapper.selectMine(dataSubmit);
    }


    /**
     * 根据当前用户统计所有任务个数
     *
     * @param dataSubmit 通常dataSubmit一次查询只包含submitor。
     * @return 反馈查询到的数据个数
     */
    public Integer countMineSubmit(DataSubmit dataSubmit) {
        Assert.notNull(dataSubmit);
        if (null == dataSubmit.getSubmitor())
            return -1;
        dataSubmit.setApprover(null);
        return dsMapper.countMine(dataSubmit);
    }

    /**
     * 根据当前用户统计所有任务个数
     *
     * @param dataSubmit 通常dataSubmit一次查询只包含approver。
     * @return 反馈查询到的数据个数
     */
    public Integer countMineApprov(DataSubmit dataSubmit) {
        Assert.notNull(dataSubmit);
        if (null == dataSubmit.getApprover())
            return -1;
        dataSubmit.setSubmitor(null);
        return dsMapper.countMine(dataSubmit);
    }

    /**
     * 查询当前登陆用户需要审核的提交信息
     *
     * @param dataSubmit 待查询的数据
     * @return 反馈查询到的结果
     **/
    @Override
    public List<DataSubmit> selectReadyApprove(DataSubmit dataSubmit) {

        return dsMapper.selectByStatusAndUser(dataSubmit);
    }

    /**
     * 根据当前用户统计所有任务个数
     *
     * @param dataSubmit 通常dataSubmit一次查询只包含submitor。
     * @return 反馈查询到的数据个数
     */
    @Override
    public Integer countReadyApprove(DataSubmit dataSubmit) {
        return dsMapper.countByStatusAndUser(dataSubmit);
    }

    /**
     * DataSubmitMapper注入方法，必须用@Autowired注解
     *
     * @param dsMapper 待注入的bean
     * @return 反馈为空
     **/
    @Autowired
    public void setDsMapper(DataSubmitMapper dsMapper) {
        this.dsMapper = dsMapper;
    }

    /**
     * 根据当前id查找DataSubmit实体
     *
     * @param id 根据id查询
     * @return DataSubmit
     */
    @Override
    public DataSubmit queryById(Integer id) {
        return dsMapper.queryById(id);
    }
}


